#!/bin/bash

# 分布式缓存测试脚本
# 此脚本会启动三个缓存节点，注册它们到集群中，并测试分布式缓存功能

echo "=== 分布式缓存测试开始 ==="

# 清理之前可能存在的进程
echo "清理之前的进程..."
pkill -f "go run main.go"
sleep 1

# 定义节点地址
NODE1="http://localhost:8001"
NODE2="http://localhost:8002"
NODE3="http://localhost:8003"

# 定义API端口
API_PORT1="8889"
API_PORT2="8890"
API_PORT3="8891"

# 启动节点1
echo "启动节点1 (端口8001, API端口8889)..."
go run main.go -port=8001 -api=$API_PORT1 -peers="$NODE2,$NODE3" &
NODE1_PID=$!
sleep 1

# 启动节点2
echo "启动节点2 (端口8002, API端口8890)..."
go run main.go -port=8002 -api=$API_PORT2 -peers="$NODE1,$NODE3" &
NODE2_PID=$!
sleep 1

# 启动节点3
echo "启动节点3 (端口8003, API端口8891)..."
go run main.go -port=8003 -api=$API_PORT3 -peers="$NODE1,$NODE2" &
NODE3_PID=$!
sleep 2

# 等待服务启动
echo "等待所有服务启动..."
sleep 3

# 测试1: 基本缓存功能
echo "\n=== 测试1: 基本缓存功能 ==="
echo "在节点1上设置数据..."
curl -s "http://localhost:$API_PORT1/_g-cache/scores/key1"
echo ""

# 测试2: 分布式数据访问
echo "\n=== 测试2: 分布式数据访问 ==="
echo "从不同节点访问相同数据..."
echo "节点1访问key2:"
curl -s "http://localhost:$API_PORT1/_g-cache/scores/key2"
echo ""
echo "节点2访问key2:"
curl -s "http://localhost:$API_PORT2/_g-cache/scores/key2"
echo ""

# 测试3: 大量数据测试，验证一致性哈希分布
echo "\n=== 测试3: 数据分布测试 ==="
echo "测试多个key的分布情况..."
for i in {3..8}
do
  echo "访问key$i:"
  curl -s "http://localhost:$API_PORT1/_g-cache/scores/key$i"
  echo ""
done

# 测试4: 测试节点故障容错
echo "\n=== 测试4: 节点故障容错测试 ==="
echo "停止节点2..."
kill $NODE2_PID
sleep 2

echo "节点2已停止，尝试访问之前可能在节点2上的数据..."
echo "访问key5:"
curl -s "http://localhost:$API_PORT1/_g-cache/scores/key5"
echo ""

# 清理资源
echo "\n=== 清理资源 ==="
echo "停止所有节点..."
kill $NODE1_PID $NODE3_PID 2>/dev/null

echo "\n=== 分布式缓存测试完成 ==="